Data transmitted to or from a memory device may be lost or damaged. To mitigate or solve this problem, an error correcting code (ECC) can be added to a piece of data (also referred to as “user data” or “user code”) written into a memory array of the memory device. The ECC can be generated by an ECC generator configured in a memory controller that controls the operation of the memory device. Usually, the user data and the corresponding ECC are stored in different portions of the memory array. The portion for storing user data is also referred to as a “normal array,” while the portion for storing ECCs is also referred to as an “ECC array.”
An ECC can be used to check whether corresponding user data contain any errors when the user data is read or transmitted from the memory device. If a correctable error exits, the ECC can also be used to correct the user data while the user data is being read or transmitted. Depending on the scheme adopted and the number of bits in the ECC, the ECC can correct a certain amount of fail bits in the corresponding user data. If the user data contain zero fail bits, they pass the check. If the number of fail bits in the user data is smaller than or equal to a maximum number of fail bits that the ECC can correct, the user data are correctable. But if the number of fail bits in the user data is larger than the maximum number, the user data are uncorrectable. For example, according to a Hamming code scheme, an ECC having eight ECC bits can be added to a chunk of user data containing 128 bits. Such an ECC allows one fail bit among the 128 bits to be corrected.
Conventionally, the error correction is performed inside the memory controller. A user may not know whether a piece of output data initially contains no error or is later corrected. That is, the user does not receive and thus cannot check a data error status of data stored in the memory device.